---
title: 增删改查
---

## namespace

namespace 中的包名要和 Dao/mapper 接口的报名一致。

## select

select 标签用于查询数据，其实就是 select 语句，其属性如下：

* id：就是对应 namespace 中的方法名。
* resultType：sql 语句的返回值。
* parameterType：sql 语句的参数类型。
* resultMap：sql 语句的返回值，如果使用了 resultMap ，那么 resultType 就不用写了。
* flushCache：是否刷新缓存，默认为 false 。
* useCache：是否使用缓存，默认为 true 。
* timeout：设置超时时间，单位为毫秒。
* fetchSize：设置一次查询返回的行数。
* statementType：STATEMENT、PREPARED 或 CALLABLE 中的一个，默认为 PREPARED 。

:::tip
增删改需要提交事务
:::

## 示例

```java UserMapper.java
package pub.wkq.dao;

import pub.wkq.pojo.User;

import java.util.List;

public interface UserMapper {
    /**
     * <h1>获取全部用户</h1>
     *
     * @return 用户信息
     */
    List<User> getUserList();

    /**
     * <h2>根据id查询用户</h2>
     *
     * @param id 用户id
     * @return 用户信息
     */
    User getUserById(int id);

    /**
     * <h2>插入用户</h2>
     *
     * @param user 用户信息
     */
    void addUser(User user);

    /**
     * <h2>更新用户</h2>
     * @param user 用户信息
     */
    void updateUser(User user);

    /**
     * <h2>删除用户</h2>
     * @param id 用户id
     */
    void deleteUser(int id);

}

```

```xml UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--命名空间会绑定一个对应的Dao/Mapper接口,相当于实现类-->
<mapper namespace="pub.wkq.dao.UserMapper">
    <!--对象入参中的属性可以直接取出来-->
    <insert id="addUser">
        insert into user(username, password, address)
        values (#{username}, #{password}, #{address})
    </insert>
    <update id="updateUser">
        update user
        set username = #{username},
        password = #{password},
        address = #{address}
        where id = #{id}
    </update>
    <delete id="deleteUser">
        delete from user
        where id = #{id}
    </delete>
    <!--id:唯一标识,对应方法名字-->
    <select id="getUserList" resultType="pub.wkq.pojo.User">
        select *
        from user
    </select>
    <select id="getUserById" resultType="pub.wkq.pojo.User">
        select *
        from user
        where id = #{id}
    </select>
</mapper>
```

```java UserMapperTest.java
package pub.wkq.dao;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pub.wkq.pojo.User;
import pub.wkq.utils.MyBatisUtils;

import java.util.List;

public class UseMapperTest {
    @Test
    public void testGetUserList() {
        // 第一步：获取 SqlSession 对象
        try (SqlSession sqlSession = MyBatisUtils.getSqlSession()) {
            //方式一：getMapper
            UserMapper userDao = sqlSession.getMapper(UserMapper.class);
            userDao.getUserList().forEach(System.out::println);
            System.out.println(" ======================= ");
            //方式二：这种方式不推荐使用
            List<User> userList = sqlSession.selectList("pub.wkq.dao.UserMapper.getUserList");
            userList.forEach(System.out::println);
            //自动关闭资源
        }
    }

    /**
     * <h2>测试根据id查询单个用户</h2>
     */
    @Test
    public void testGetUserById() {
        try (SqlSession sqlSession = MyBatisUtils.getSqlSession()) {
            UserMapper userDao = sqlSession.getMapper(UserMapper.class);
            System.out.println(userDao.getUserById(1));
        }
    }

    /**
     * <h2>测试插入用户</h2>
     */
    @Test
    public void testInsertUser() {
        try (SqlSession sqlSession = MyBatisUtils.getSqlSession()) {
            UserMapper userDao = sqlSession.getMapper(UserMapper.class);
            User user = new User(4, "小明", "123456", "北京");
            userDao.addUser(user);
            System.out.println("user = " + user);
            //提交事务
            sqlSession.commit();
        }
    }

    /**
     * <h2>测试更新用户</h2>
     * 更新id为4的用户的用户名为小红
     */
    @Test
    public void testUpdateUser() {
        try (SqlSession sqlSession = MyBatisUtils.getSqlSession()) {
            UserMapper userDao = sqlSession.getMapper(UserMapper.class);
            User user = new User(4, "小红", "123456", "北京");
            userDao.addUser(user);
            System.out.println("user = " + user);
            //提交事务
            sqlSession.commit();
        }
    }

    /**
     * <h2>测试删除用户</h2>
     * 删除 id = 4 的用户
     */
    @Test
    public void testDeleteUser() {
        try (SqlSession sqlSession = MyBatisUtils.getSqlSession()) {
            UserMapper userDao = sqlSession.getMapper(UserMapper.class);
            userDao.deleteUser(4);
            //提交事务
            sqlSession.commit();
        }
    }
}
```